/**
 * 各种正则表达式
 * mobile   手机号
 * email    电子邮箱
 * password 密码【6-20位】
 * integer  正整数【不包含0】
 * money    金钱
 * TINumber 纳税识别号
 * IDCard   身份证
 * userName 账户名称【汉字、字母、数字、“-”、“_”的组合】
 * URL      URL
 * TEL      固定电话
 */

// 手机号
export const mobile = /^0?(13[0-9]|14[0-9]|15[0-9]|16[0-9]|17[0-9]|18[0-9]|19[0-9])[0-9]{8}$/

// 电子邮箱
export const email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/

// 密码【6-20位】
export const password = /^[@A-Za-z0-9!#$%^&*.~,]{6,20}$/

// 正整数【不包含0】
export const integer = /^[1-9]\d*$/

// 正整数【包含0】
export const Integer = /^[0-9]\d*$/

// 金钱
export const money = /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/

// 纳税识别号
export const TINumber = /^((\d{6}[0-9A-Z]{9})|([0-9A-Za-z]{2}\d{6}[0-9A-Za-z]{10,12}))$/

// 身份证
// export const IDCard = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
export function checkIdCard(idCard, rule) {
	if (rule.required) {
		if (!idCard) {
			return "身份证不能为空";
		} else {
			const identNumber = idCard;
			if (!/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/.test(
					identNumber)) {
				return "身份证号码格式错误";
			}
			//身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X。
			if (!/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(identNumber)) {
				return "身份证号码格式错误";
			}
			//校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。

			//下面分别分析出生日期和校验位
			let len, re;
			len = identNumber.length;
			//判断18位身份证号码，现在在国家统一身份证为18位。
			if (len == 18) {
				re = new RegExp(
					/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
				let arrSplit = identNumber.match(re);

				//检查生日日期是否正确
				let dtmBirth = new Date(
					arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]
				);
				let bGoodDay;
				bGoodDay =
					dtmBirth.getFullYear() == Number(arrSplit[2]) &&
					dtmBirth.getMonth() + 1 == Number(arrSplit[3]) &&
					dtmBirth.getDate() == Number(arrSplit[4]);
				if (!bGoodDay) {
					return "身份证号码日期不匹配";
				} else {
					//检验18位身份证的校验码是否正确。
					//校验位按照ISO 7064:1983.MOD 11-2的规定生成，X可以认为是数字10。
					let valnum;
					// let arrInt = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2];
					let arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9,
						10, 5, 8, 4, 2);
					let arrCh = new Array("1", "0", "X", "9", "8", "7", "6",
						"5", "4", "3", "2");
					let nTemp = 0,
						i;
					for (i = 0; i < 17; i++) {
						nTemp += identNumber.substr(i, 1) * arrInt[i];
					}
					valnum = arrCh[nTemp % 11];
					if (valnum != identNumber.substr(17, 1)) {
						return "身份证号码校验位不正确";
					}
					return true;
				}
			} else {
				return "身份证号码位数不足18位";
			}
		}
	} else {
		return true;
	}
};

// 账户名称【汉字、字母、数字、“-”、“_”的组合】
export const userName = /[A-Za-z0-9_\-\u4e00-\u9fa5]$/
// 真实姓名
export const realName = /^(([a-zA-Z+\.?\·?a-zA-Z+]{2,30}$)|([\u4e00-\u9fa5+\·?\u4e00-\u9fa5+]{2,30}$))/
// URL
export const URL =
	/^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/

// 固话
export const TEL = /0\d{2,3}-\d{7,8}/
